/*
function test(){
    a=30;
    console.log("a="+a);
    var b=10;
    console.log("b="+b);
}
test();

function test(){
    a=30;
    var b=10;
}
test();
console.log("a="+a);
console.log("b="+b);

function test(){
    a=30;
    console.log("a="+a);
    console.log("b="+b);
    var b=10;
}
test();


function foo() {
    var x = 1;
    function bar() {
        var x = 'A';
        console.log('x in bar() = ' + x); 
    }
    console.log('x in foo() = ' + x);
    bar();
}

foo();


alert(2==true);//alert()函数用于弹出一个模态的消息对话框
alert(2===true);
alert("2"&&true);
alert(0=="");
alert(null==false);
console.log(5/4);
console.log(20/4);


// 创建对象：
var person = {
    firstName: "Bill",
    lastName : "Gates",
    id     : 678,
    fullName : function() {
      return this.firstName + " " + this.lastName;
    }
  };
  console.log(person.fullName());

  
  
  function add(x,y,f){
      return f(x)+f(y);
      
    }
    
    console.log(add(-5,6,Math.abs));//11
  
    
    //对一个数组求和
    var arr=[1,3,5,7,9];
    var a =arr.reduce(function(x,y){
        return x+y;
    })
    
    console.log(a);

    //把字符串转换成整数
var arr=['1','2','3'];
var r=arr.map(function(val){
    return parseInt(val);
});
console.log(r);


//把输入的英文首字母变为大写其余字母为小写使其规范化
function n(arr){
    function c(w){
        var list='';
        for(i=0;i<w.length;i++){
            if(i==0)
            list+=w[i].toUpperCase();
            else
                list+=w[i].toLowerCase();
            }
            return list;
        }
        return arr.map(c);
    }
    
    console.log(n(['adam','LISA','barT']));
    
    
    
    var arr=[1,2,3,4,5,6,7,8,9,10];
    var r=arr.filter(function(x){
        return x%2==0;
    })
    console.log(r);
    
    
    //find()方法用于查找符合条件的第一个元素，如果找到了，返回这个元素，否则，返回undefined
    
    var arr=['Apple','pear','orange'];
    console.log(arr.find(function(s){
        return s.toLowerCase()===s;
    }));//输出pear
    
    //findIndex()和find()类似，也是查找符合条件的第一个元素，不同之处
    //在于findIndex()返回这个元素的索引，如果没有找到，返回-1
    
    var arr=['Apple','pear','orange'];
    console.log(arr.findIndex(function(x){
        return x.toLowerCase()===x;
    }));//可以说是返回pear因为它的索引值是1
    
//反之这里如果要求全都是大写字母的单词的话是没有这个结果的然后就会返回-1


//forEach()
//forEach()和map()类似，但是forEach()不会返回新的数组。传入的函数不需要返回值
var arr=['Apple','pear','orange'];
console.log(arr.forEach);


//闭包
function a(){
    var name='dov';
    return function(){
        return name;
    }
}

var b=a();
console.log(b())



//标准对象
console.log(typeof(123));//number
console.log(typeof(NaN));//number
console.log(typeof('str'));//string
console.log(typeof(true));//boolean

/* 
一、包装对象(包装对象用new创建)

所谓的包装对象指的是与数值、字符串、布尔值分别相对应的
number、string、Boolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象

二、包装对象设计的目的：
1、首先是使得“对象”这种类型可以覆盖JS所有的值，
整门语言有一个通用的数据模型，其次是使得原始类型的值也没有办法调用自己的方法。

2、number、string、Boolean这三个原生对象，如果不作为构造函数调用(即调用时不加new),
而是作为普通函数调用，常常用于将任意类型的值转为数值、字符串和布尔值。

var n=new Number(123);//123,生成了新的包装类型
console.log(n);//输出Number{123} 属性是Number 值是123


console.log(typeof new Number(123));//object
console.log(typeof new Number(123)===123);//false(类型已经变成object了在比较就返回false)
console.log(new Number(123));//属性是Number 值是123
console.log(new Number(123)===123);//false

//最好不要使用包装对象，尤其是针对sting类型


//字符串转为数值
console.log(typeof Number('123'));//Number
console.log(Number('123'));//123
//数值转为字符串
console.log(typeof String(123));//String
console.log(String('123'));//123

//数值转为布尔值
console.log(typeof Boolean(123));//boolean
console.log(Boolean(123));//true

/* 

总结：这三个对象作为构造函数使用(带有new)时，可以将原始类型的值转为对象
作为普通函数使用时(不带有new)，可以将任意类型的值，转为原始类型的值

1、不要使用new Number()、new Boolean()、new String()创建包装对象；

2、用parseint()或parsefloat()来转换任意类型到number

3、用string()来转换任意类型到string，或者直接调用某个对象的tostring()方法；

4、通常不必把任意类型转换为Boolean再判断，因为可以直接写if(myvar){...};




//小明为了和女友庆祝情人节，特意制作了网页，并提前预定了法式餐厅。
//小明打算用JavaScript给女友一个惊喜留言

//修改后
var today =new Date();//获取当前时间
if(today.getMonth()===1 && today.getDate()===14){//JS的月份从0开始
    alert('亲爱的，我预定了晚餐，晚上6点在餐厅见！')
}
//getMonth返回Date对象中的月份，其值介于0至11之间
//getDate返回Date对象中的月份中的天数，其值介于1至31之间

 
正则表达式

\d可以匹配一个数字
\w可以匹配一个字母或者数字

例：'010-12345' 由于'-'是特殊字符，在正则表达式中，要用'\'转义

\d{3}\-\d{3-8}


//切分字符串

console.log('a b   c'.split(' '));//['a', 'b', '', '', 'c']  <==无法识别连续的空格

//用正则表达式试一下
// \s 含义[\t\n\f\r]空白
console.log('a b   c'.split(/\s+/));//['a', 'b', 'c']

//无论多少个空格都可以正常分割。加入，试试
console.log('a,b, c d'.split(/[\s,]+/));// ['a', 'b', 'c', 'd']

//再加入；试试

console.log('a;b,;c  d'.split(/[\s\,\;]+/));//['a', 'b', 'c', 'd']


//练习：验证并提取出带名字的Email地址


var re=/\<(\w+\s+\w+)\>\s+(\w+@\w+\.\W+)/;

var r =re.exec('<Tom Paris> tom@voyager.org');
if(r===null || r.toString()!==['<Tom Paris> tom@voyager.org','Tom Paris','tom@voyager.org'].toString()){
    console.log('测试失败！');
}
else{
    console.log('测试成功！');
}



//通过常用的数组来认识JS对象：

var arr=[1,2,3,4,5,6];//定义一个数组 弹出object
alert(typeof arr);//弹出object 说明数组是个对象
alert(arr.length);//弹出5 说明对象的属性length
arr.push(6);//对象的方法push
alert(arr);


//JS中的this以及全局对象window

function show(){//定义一个全局函数
    alert(this);
}

show();//调用show 输出object window



var person =new Object();//创建一个新对象 new object()创建出来的对象几乎是空白的，需要自己添加属性

person.name='HZT';//为person对象添加属性

person.age=22;

person.showName=function(){//为person对象添加方法
    alert('姓名'+this.name);
}

person.showAge=function(){
    alert('年龄'+this.age);
}

person.showName();//调用对象的方法
person.showAge();


//求数组和
var arr=[1,2,3,4,5,6];

var a=arr.reduce(function(x,y){
    return x+y;
})

console.log(a);



console.log(navigator.appCodeName);//浏览器名称
console.log(navigator.appVersion);//浏览器版本

var width=window.innerWidth ||document.body.clientWidth;
console.log(width);

console.log(location.href);//获取当前页的URL信息

console.log(location.protocol);
console.log(location.host);
console.log(location.port);
console.log(location.pathname);
console.log(location.search);
console.log(location.hash);


console.log(location.assign);
'use strict';
document.title='好好学习天天向上';//将头部改为好好学习天天向上不再是hzt.js

var menu=document.getElementById('drink-menu');
var drinks=document.getElementsByClassName('dt');
var i,s;
s='提供的饮料有：';
for(i=0;i<drinks.length;i++){
    s=s+drinks[i].innerHTML+',';
}
console.log(s);

//选择<p>javascript</p>
var js=document.getElementById('test-p');

// 选择<p>Python</p>,<p>Ruby</p>,<p>Swift</p>
var arr=document.getElementsByClassName('c-red c-green')[0].children;

// 选择<p>Haskell</p>
var Haskell=document.getElementsByClassName('c-green')[1].lastElementChild;


if (!js || js.innerText !== 'JavaScript') {
    alert('选择JavaScript失败!');
} else if (!arr || arr.length !== 3 || !arr[0] || !arr[1] || !arr[2] || arr[0].innerText !== 'Python' || arr[1].innerText !== 'Ruby' || arr[2].innerText !== 'Swift') {
    console.log('选择Python,Ruby,Swift失败!');
} else if (!haskell || haskell.innerText !== 'Haskell') {
    console.log('选择Haskell失败!');
} else {
    console.log('测试通过!');
}

*/


/*

  <div class="c-red">
        <p id="test-p">JavaScript</p>
        <p>Java</p>
      </div>
      <div class="c-red c-green">
        <p>Python</p>
        <p>Ruby</p>
        <p>Swift</p>
      </div>
      <div class="c-green">
        <p>Scheme</p>
        <p>Haskell</p>
      </div>
    </div>
    //更新
    var p=document.getElementById('p-id');//获取节点
    //p.innerHTML='ABC';//设置文本为ABC
    
    setTimeout(function(){
        p.innerHTML='ABC'
        p.innerHTML='ABC <span style="color:red">RED</span> XYZ';
    },2000);
    
    
    var checkRegisterForm=function(){
        return false;
    }

;(function(){
    window.testFormHandler=checkRegisterForm;
    var form=document.getElementById('test-register');
    if(form.dispatchEvent){
        var event=new Event('submit',{
            bubbles:true,
            cancelable:true
        });
        form.dispatchEvent(event);
    }else{
        form.fireEvent('onsubmit');
    }
})

*/

function checkRegisterForm(){undefined
    var usrname = document.getElementById('username');
    var gz = /^[_0-9a-zA-Z]{3,10}$/;
    var pwd1 = document.getElementById('password');
    var pwd2 = document.getElementById('password-2');
    if(gz.test(usrname.value) == true && (pwd1.value.length > 6 && pwd1.value.length < 20) && (pwd1.value == pwd2.value)){undefined
    return true;
    }else{undefined
    return false;
    }
    
    }